package com.hn.zhijian.base.common;

import lombok.Getter;

/**
 *
 * @author carl chen
 * @date 2017-03-23
 */
@Getter
public enum StatusCode {

    /**
     * 错误码格式说明（示例：202001）
     * 服务级错误（1为系统级错误）	服务模块代码(即业务模块标识)	具体错误代码
     *    2                            02	                    001
     */

    NOT_DATE(100, "参数不能为空不能为空"),

    PARAM_ERR(101,"参数转换异常"),
    /**
     * 常用的状态码，业务模块的状态码请勿添加在此处，而应该是在各个业务模块定义，格式如上
     * 200 = 成功
     */
    OK(200, "ok"),
    /**
     * 文件通过多线程生成，弹出提示
     */
    GENERATE_WORLD(201, "文件生成成功"),
    /**
     * 500 = 服务器内部错误
     */
    SERVER_ERROR(500, "internal server error"),
    /**
     * 400 = 请求格式错误、参数错误
     */
    BAD_REQUEST(400, "bad request"),
    /**
     * 401 = 未授权
     */
    UNAUTHORIZED(401, "无效的权限，请检查你的token"),

    /**
     * 415 = 无效的用户名
     */
    INVALID_USER(415, "无效的用户名/或密码错误"),
//    ExcessiveAttemptsException
    /**
     * 登录次数过多，
     */
    EXCESSIVE_ATTEMPTS_EXCEPTION(416, "登录次数过多，请稍后再试！"),
    /**
     * 404 = 请求的资源不存在、数据不存在
     */
    NOT_FOUND(404, "not found"),
    /**
     * 409 = 资源存在冲突、数据已存在
     */
    CONFLICT(409, "conflict"),
    /**
     *  424 违背数据完整性、当插入、删除和修改数据的时候，违背的数据完整性约束抛出的异常。例如：主键重复异常、存在外键关联数据依赖等
     */
    DATA_INTEGRITY_VIOLATION_EXCEPTION(424, "data integrity violation exception");

    /**
     * 状态码
     */

    private int code;

    /**
     * 状态提示
     */
    private String message;

    StatusCode(int code, String message) {
        this.code = code;
        this.message = message;
    }


    /**
     * 通过code获取msg
     * @param code
     * @return
     */
    public static String getMessage(Integer code){
        StatusCode[] businessModeEnums = values();
        for (StatusCode businessModeEnum : businessModeEnums) {
            if (businessModeEnum.getCode() == code) {
                return businessModeEnum.getMessage();
            }
        }
        return "";
    }
}
